#include "gestionnairetextures.h"


GestionnaireTextures* GestionnaireTextures::_instance = new GestionnaireTextures();

//-----------------------------------------------------Constructeurs et destructeurs-----------------------------------------------------//

/****************************************************************************
 * Constructeur avec paramètres                                             *
 * On initialise chaque lumière du tableau                                  *
 ****************************************************************************/
GestionnaireTextures::GestionnaireTextures()
{

}

/****************************************************************************
 * Destructeur                                                              *
 ****************************************************************************/
GestionnaireTextures::~GestionnaireTextures()
{
    for(int i = 0; i < _listeTextures.size(); ++i)
    {
        delete _listeTextures[i];
    }
}

//---------------------------------------------------------------Méthodes----------------------------------------------------------------//
/*************************************************************************************
 * On renvoie l'unique instance de la classe GestionnaireLumiere                     *
 * @return GestionnaireLumiere : instance courante de la classe Gestionnaire Lumiere *
 *************************************************************************************/
Texture& GestionnaireTextures::getTexture(QString nomTexture)
{
    int i;
    bool trouve = false;

    for(i = 0; !trouve && i < _listeTextures.size(); ++i)
    {
        if(_listeTextures[i]->getNomTexture() == nomTexture)
        {
            trouve = true;
        }
    }

    --i;

    if(!trouve)
    {
        i = chargerTexture(nomTexture);

        if(i == -1)
        {
             throw std::string("GestionnaireTextures.getTexture : erreur lors du chargement de l'image");
        }
    }

    return *_listeTextures[i];
}

/*************************************************************************************
 * On charge la texture dans le gestionnaire                                         *
 * @param nomTexture : le nom de la texture à charger à partir des ressources        *
 * @return int : l'indice de la nouvelle texture. -1 si probleme                     *
 *************************************************************************************/
int GestionnaireTextures::chargerTexture(QString nomTexture)
{
    Texture* nouvelleTexture = new Texture(nomTexture);
    int retour;

    if(nouvelleTexture->getId()==0)
    {
        retour = 0;
        delete nouvelleTexture;
    }else
    {
        _listeTextures.push_back(nouvelleTexture);
        retour = _listeTextures.size() - 1;
    }

    return retour;
}

//---------------------------------------------------------------Accesseurs--------------------------------------------------------------//

/*************************************************************************************
 * On renvoie l'unique instance de la classe GestionnaireLumiere                     *
 * @return GestionnaireLumiere : instance courante de la classe Gestionnaire Lumiere *
 *************************************************************************************/
GestionnaireTextures& GestionnaireTextures::getInstance()
{
    return *_instance;
}
//------------------------------------------------------Surcharge des opérateurs---------------------------------------------------------//

